热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通用性|定数_分布式数据存储与管理[HDFS+HBase]

篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式数据存储与管理[HDFS+HBase]相关的知识,希望对你有一定的参考价值。一、系

篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式数据存储与管理[HDFS+HBase]相关的知识,希望对你有一定的参考价值。



一、系统架构

在分布式存储领域,相信大多数人对HDFS(Hadoop Distributed File System)并不陌生,它是GFS(Google File System)的开源实现版本,解决大规模非结构化数据存储的问题。然而,HBase则是基于HDFS之上的一个分布式的、面向列存的开源NoSQL数据库,解决大规模结构化和半结构化数据存储的问题。


a) HDFS架构

HDFS[1][2]采用Master/Slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成,如图1所示。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。


图1 HDFS系统架构


b) HBase架构

HBase[3][4][5]也同样采用Master/Slave架构。一个HBase集群是由一个HMaster和一定数目的RegionServer组成,如图2所示。HBase的一张表会被切分成若干块,每块叫做一个Region。每个Region中存储着从startKey到endKey中间的记录。这些Region会被分到集群的各个节点上去存储,每个节点叫做一个RegionServer,这些节点负责数据的读写,一个RegionServer可以处理大约1000个Regions。HMaster的功能是处理Region的协调工作,具体包括:管理RegionServer,实现其负载均衡;管理和分配Region,比如在Region Split时分配新的Region;在RegionServer退出时迁移其内的Region到其他RegionServer上;监控集群中所有RegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态);处理Schema更新请求(创建、删除、修改Table的定义)。


图2 HBase系统架构

有一个的特殊的HBase目录表,.META表,保存了集群中Regions的位置。HBase读写流程,如图3所示。


图3 HBase读写流程

当客户端第一次读取(写入)HBase请求到达时:


  • 第一步:客户端从HMaster中获取.META表; 第二步:客户端将查询.META表来获取要访问的row
  • key对应的RegionServer,并将这些信息与.META表格一起缓存起来。
  • 第三步:将从相应的RegionServer获取该行(写入该行到相应的RegionServer。

二、分析与对比

HDFS+HBase与单机中的数据库+文件系统类似,但又不完全一样。首先,HBase不实现复制机制,而是交给底下的HDFS系统,HDFS则会把一个块写入到多个数据节点中。因此,HBase更像维护表格与文件之间映射关系的一个计算引擎。如果用Aurora或PolarDB中的描述方式,HBase是控制面(控制引擎),HDFS则是数据面(存储引擎),只不过这两种层级分布在不同的系统之中而已。其次,HBase与传统的关系型数据库对外接口不同,仅支持API接口,不支持SQL语言,也不支持Join等操作,也放松了ACID属性,所以,它是一个NoSQL型数据库。

像HDFS+HBase这样分布式数据存储与管理系统,它们将控制和存储两大模块进行分层,分别在两个相对独立的分布式系统中实现。不难发现,这种实现方式既存在优点,也存在弊端。因为层次化的设计可以使整个系统的耦合度和复杂度降低,也可以使整个系统的每一个部分相对独立,也更具有通用性和一般性。然而,这样相对独立的设计也给整个系统带来许多不必要的开销,降低了系统的整体性能。在每一个独立的系统中,都有一整套Master/Slave架构,上一层系统充当下一层系统的Client端,这就使整个数据存储的路径变长了,例如,一次简单写操作要既经过HBase的Master也要经过HDFS的Master。随着越来越多的应用对低时延、高吞吐量特性的需求,这样的设计也就很难满足了。所以,整个系统就必须高度融合,尽可能减少不必要的网络和存储开销,使整个读/写路径变的更短,才使整系统的性能得以提升。换句话说,当前的HDFS+HBase软件栈太重了,我们必须将其减负才能实现低时延、高吞吐量的特性。

如果我们换个角度看问题,HDFS+HBase其本质也是一种shared disk的架构,整个HBase集群共享下层HDFS存储池。相信大多数人已经对shared disk VS shared nothing问题[7][8]不言而喻了,就不再赘述了。除了上述问题以外,HBase采用列存储的方式,很难应对OLTP型的负载,并且它的数据恢复也采用WAL的方式,导致其恢复时间较长,也存在不可靠的分裂问题[6]。


三、小结

像HDFS+HBase这样,由多个独立的分布式系统组成的数据存储与管理解决方案,各个系统更具一般性和通用性,但是很难满足用户对更低时延、更高吞吐量的追求。为实现更高性能,整个系统之间必须高度融合,更具定制化,尽可能缩短数据处理的路径,从而减少不必要的开销。


参考文献:

[1] http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html.
[2] https://www.cnblogs.com/laov/p/3434917.html.
[3] https://mapr.com/blog/in-depth-look-hbase-architecture.
[4] https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html.
[5] https://www.edureka.co/blog/overview-of-hbase-storage-architecture.
[6] https://www.toadworld.com/platforms/nosql/b/weblog/archive/2013/10/14/avoiding-hbase-reliability-problems.
[7] http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture.
[8] Lee S. Shared-nothing vs. shared-disk cloud database architecture[J]. International Journal of Energy, Information and Communications, 2011, 2(4).


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 伸缩性|发生_分布式文件系统设计,该从哪些方面考虑?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式文件系统设计,该从哪些方面考虑?相关的知识,希望对你有一定的参考价值。点击上方关注“ ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
author-avatar
虎仔球妈_459
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有